'''
针对VIEW视图提供一个简单的权限检查，如果用户有权限，则pass
否则，提醒用户没有权限并跳转禁止页
'''

from login.models import UserProfile, CustomPerms
from django.contrib.auth.models import Group


# 获取自定义权限
# 自定义权限系统，输入菜单ID，用户ID/角色组ID，请求的权限类型
# 经检查，有权限，返回True， 没权限返回False
def check_custom_perms(mid, uid, perms_type):
    # 1,检查请求的权限类型
    if perms_type in ["read", "Read", "READ"]:
        # 请求检查的是查看权限
        p_type = 1
    elif perms_type in ["change", "Change", "CHANGE", "EDIT", "Edit", "edit"]:
        # 请求检查的是修改/新增权限
        p_type = 2
    elif perms_type in ["Delete", "delete", "DELETE", "del", "DEl"]:
        # 请求的是删除权限
        p_type = 3
    else:
        # 其他均为非法请求，直接返回False
        return False
    # 2，先检查是否是超级管理员，如果是直接返回True
    if UserProfile.objects.filter(is_superuser=1, id=uid):
        # 是超级管理员
        return True
    # 2.1 检查用户是否有此菜单的权限
    perms_data = CustomPerms.objects.filter(to_menu_id=mid, type=p_type).all()
    if perms_data:
        # 此菜单的所有用户权限
        user_perms = perms_data[0].perms.all()
        # 此菜单的所有角色权限
        role_perms = perms_data[0].perms_group.all()
        # 获取用户的角色ID
        user_data = UserProfile.objects.get(id=uid)
        # 2.2 检查用户权限
        if user_data.username in user_perms:
            return True
        # 检查用户角色权限
        if user_data.role in role_perms:
            return True
        # 检查完成，没有权限
        return False
    else:
        # 此菜单未创建权限
        return False


# 检查角色是否有权限，此函数给前端权限设置调用，在针对角色设置权限时，匹配前端展示数据
def check_role_perms(mid, rid, perms_type):
    # 1,检查请求的权限类型
    if perms_type in ["read", "Read", "READ"]:
        # 请求检查的是查看权限
        p_type = 1
    elif perms_type in ["change", "Change", "CHANGE", "EDIT", "Edit", "edit"]:
        # 请求检查的是修改/新增权限
        p_type = 2
    elif perms_type in ["Delete", "delete", "DELETE", "del", "DEl"]:
        # 请求的是删除权限
        p_type = 3
    else:
        # 其他均为非法请求，直接返回False
        return False
    perms_data = CustomPerms.objects.filter(to_menu_id=mid, type=p_type).all()
    if perms_data:
        # 此菜单的所有角色权限
        role_perms = perms_data[0].perms_group.all()
        # 检查用户角色权限
        role = Group.objects.get(id=rid)
        if role in role_perms:
            return True
        # 检查完成，没有权限
        return False
    else:
        # 此菜单未创建权限
        return False
